﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Practices.ObjectBuilder;
using GC2.Entities.Seguridad;
using GC2.Entities.Admin;
using GC2.Bussines.BMAdmin;

public partial class Informes_Indicadores : GenericPage
{
    #region Propiedades
    Usuarios usuario = new Usuarios();
    private Param param = new Param();

    #endregion

    #region Controles

    #region Page_Load
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SetearCultura();
            SetearConexion();
            if (!this.IsPostBack)
            {
                usuario = (Usuarios)Session["UsuarioActual"];
                Limpiar();
                lblTipo.Text = "Informe de VENTAS para el período";

                DateTime dHoy = DateTime.Now.Date;
                FechaH.SetFecha(dHoy);
                string sFecha = SetearFecha();
                FechaD.SetFecha(Convert.ToDateTime(sFecha));

                btnOtro.Enabled = false;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnCancelar_Click
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        try
        {
            Response.Redirect("~/Seguridad/Default.aspx", false);
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region rdbList_SelectedIndexChanged
    protected void rdbList_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            int iTipo = Convert.ToInt16(rdbList.SelectedValue);
            switch (iTipo)
            {
                case 1:
                    // Ventas();
                    Limpiar();
                    lblTipo.Text = "Informe de VENTAS para el período";
                    break;
                case 2:
                    // Compras
                    Limpiar();
                    lblTipo.Text = "Informe de COMPRAS para el período";
                    break;
                case 3:
                    // Egresos
                    Limpiar();
                    lblTipo.Text = "Informe de EGRESOS para el período";
                    break;
                case 4:
                    // Ingresos
                    Limpiar();
                    lblTipo.Text = "Informe de INGRESOS para el período";
                    break;
                case 5:
                    // Resultado
                    Limpiar();
                    lblTipo.Text = "RESULTADO Global para el período";
                    break;
                case 6:
                    // Cuentas a Cobrar - Clientes
                    Limpiar();
                    trFechas.Visible = false;
                    lblAccion.Text = "Suma de SALDOS de Cuenta Corriente";
                    lblTipo.Text = "Cuentas a Cobrar: Clientes";
                    lblLCantidad.Text = "Cantidad de Clientes:";
                    break;
                case 7:
                    // Cuentas a Pagar - Proveedores
                    Limpiar();
                    trFechas.Visible = false;
                    lblAccion.Text = "Suma de SALDOS de Cuenta Corriente";
                    lblTipo.Text = "Cuentas a Pagar - Proveedores";
                    lblLCantidad.Text = "Cantidad de Proveedores:";
                    break;

                default:
                    break;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnOtro_Click
    protected void btnOtro_Click(object sender, EventArgs e)
    {
        try
        {
            Limpiar();
            rdbList.Enabled = true;
            rdbList.SelectedIndex = 0;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnVer_Click
    protected void btnVer_Click(object sender, EventArgs e)
    {
        try
        {
            if (FechaD.GetFecha() > FechaH.GetFecha())
            {
                // mensaje error en fecha
                mpeFecha.Show();
            }
            else
            {
                int iTipo = Convert.ToInt16(rdbList.SelectedValue);
                switch (iTipo)
                {
                    case 1:
                        VentasGlobal();
                        break;
                    case 2:
                        ComprasGlobal();
                        break;
                    case 3:
                        EgresosGlobal();
                        break;
                    case 4:
                        IngresosGlobal();
                        break;
                    case 5:
                        ResultadoGlobal();
                        break;
                    case 6:
                        DeudaClientes();
                        break;
                    case 7:
                        DeudaProveedores();
                        break;

                    default:
                        break;
                }
                btnOtro.Enabled = true;
                btnVer.Enabled = false;
                rdbList.Enabled = false;
                lblAccion.Text = "Informe Realizado : Otro o Cancelar";
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #endregion 

    #region Métodos

    #region Egresos
    protected void Egresos()
    {
        try
        {
            Egresos egreso = new Egresos();
            List<Egresos> listaEgresos = new List<Egresos>();
            BMEgresos bmEgresos = new BMEgresos(Connection);
            listaEgresos = bmEgresos.BMEgresosSearch(egreso,egreso);
            Session["listaEgresos"] = listaEgresos;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Ingresos
    protected void Ingresos()
    {
        try
        {
            Ingresos ingreso = new Ingresos();
            List<Ingresos> listaIngresos = new List<Ingresos>();
            BMIngresos bmIngresos = new BMIngresos(Connection);
            listaIngresos = bmIngresos.BMIngresosSearch(ingreso,ingreso);
            Session["listaIngresos"] = listaIngresos;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Limpiar
    protected void Limpiar()
    {
        try
        {
            trFechas.Visible = true;
            lblAccion.Text = "Seleccione Período e Información a Evaluar";
            lblLCantidad.Text = "Cantidad de Operaciones:";
            // rdbList.SelectedIndex = 0;
            lblCantidad.Text = "";
            lblTotal.Text = "";
            btnVer.Enabled = true;
            btnOtro.Enabled = false;
            lblTotal.Visible = true;
            lblTRed.Visible = false;
            lblTGreen.Visible = false;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region VentasGlobal
    protected void VentasGlobal()
    {
        try
        {
            BMVentas bmVentas = new BMVentas(Connection);
            Ventas ventasD = new Ventas();
            Ventas ventasH = new Ventas();
            List<Ventas> listaVentas = new List<Ventas>();
            ventasD.Fecha = FechaD.GetFecha();
            ventasH.Fecha = FechaH.GetFecha();
            ventasD.Id_Estado = 1;
            listaVentas = bmVentas.BMVentasSearch(ventasD, ventasH);

            int iCantidad = 0;
            Decimal dTotal = 0;
            if (listaVentas.Count > 0)
            {
                foreach (Ventas venta in listaVentas)
                {
                    iCantidad++;
                    dTotal += venta.Total;
                }
                lblCantidad.Text = iCantidad.ToString();
                lblTotal.Text = dTotal.ToString("###,###,###,##0.00");
                lblTipo.Text = "Informe de VENTAS para el período";
            }
            else
            {
                lblCantidad.Text = "0";
                lblTotal.Text = "0";
                lblTipo.Text = "No hay VENTAS en este período";
            }
            btnVer.Enabled = false;
            
            
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ComprasGlobal
    protected void ComprasGlobal()
    {
        try
        {
            BMCompras bmCompras = new BMCompras(Connection);
            Compras comprasD = new Compras();
            Compras comprasH = new Compras();
            List<Compras> listaCompras = new List<Compras>();
            comprasD.Fecha = FechaD.GetFecha();
            comprasH.Fecha = FechaH.GetFecha();
            comprasD.Id_Estado = 1;
            listaCompras = bmCompras.BMComprasSearch(comprasD, comprasH);

            int iCantidad = 0;
            Decimal dTotal = 0;
            if (listaCompras.Count > 0)
            {
                foreach (Compras compra in listaCompras)
                {
                    iCantidad++;
                    dTotal += compra.Total;
                }
                lblCantidad.Text = iCantidad.ToString();
                lblTotal.Text = dTotal.ToString("###,###,###,##0.00");
                lblTipo.Text = "Informe de COMPRAS para el período";
            }
            else
            {
                lblCantidad.Text = "0";
                lblTotal.Text = "0";
                lblTipo.Text = "No hay COMPRAS en este período";
            }
            btnVer.Enabled = false;


        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region IngresosGlobal
    protected void IngresosGlobal()
    {
        try
        {
            //BMVentas bmVentas = new BMVentas(Connection);
            //Ventas ventasD = new Ventas();
            //Ventas ventasH = new Ventas();
            //List<Ventas> listaVentas = new List<Ventas>();
            //ventasD.Fecha = FechaD.GetFecha();
            //ventasH.Fecha = FechaH.GetFecha();
            //listaVentas = bmVentas.BMVentasSearch(ventasD, ventasH);

            int iCantidad = 0;
            Decimal dTotal = 0;
            //if (listaVentas.Count > 0)
            //{
            //    foreach (Ventas venta in listaVentas)
            //    {
            //        if (venta.Pago > 0)
            //        {
            //            iCantidad++;
            //            dTotal += venta.Pago;
            //        }
            //    }
            //}

            BMIngresos bmIngresos = new BMIngresos(Connection);
            Ingresos ingresoD = new Ingresos();
            Ingresos ingresoH = new Ingresos();


            List<Ingresos> listaIngresos = new List<Ingresos>();
            ingresoD.Fecha = FechaD.GetFecha();
            ingresoH.Fecha = FechaH.GetFecha();
            listaIngresos = bmIngresos.BMIngresosSearch(ingresoD, ingresoH);

            if (listaIngresos.Count > 0)
            {
                foreach (Ingresos ingreso in listaIngresos)
                {
                    iCantidad++;
                    dTotal += ingreso.Monto;
                }
            }

            if (iCantidad > 0)
            {
                lblCantidad.Text = iCantidad.ToString();
                lblTotal.Text = dTotal.ToString("###,###,###,##0.00#");
                lblTipo.Text = "Informe de INGRESOS para el período";
            }
            else
            {
                lblCantidad.Text = "0";
                lblTotal.Text = "0";
                lblTipo.Text = "No hay INGRESOS registrados para el período";
            }
            Ingresos ingresosTotal = new Ingresos();
            ingresosTotal.Id_Caja = Convert.ToInt64(iCantidad);
            ingresosTotal.Monto = dTotal;
            Session["ingresosTotal"] = ingresosTotal;

            btnVer.Enabled = false;


        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region EgresosGlobal
    protected void EgresosGlobal()
    {
        try
        {
            //BMCompras bmCompras = new BMCompras(Connection);
            //Compras comprasD = new Compras();
            //Compras comprasH = new Compras();
            //List<Compras> listaCompras = new List<Compras>();
            //comprasD.Fecha = FechaD.GetFecha();
            //comprasH.Fecha = FechaH.GetFecha();
            //listaCompras = bmCompras.BMComprasSearch(comprasD, comprasH);

            int iCantidad = 0;
            Decimal dTotal = 0;
            //if (listaCompras.Count > 0)
            //{
            //    foreach (Compras compra in listaCompras)
            //    {                     
            //        if (compra.Pago > 0)
            //        {
            //            iCantidad++;
            //            dTotal += compra.Pago;
            //        }
            //    }
            //}

            BMEgresos bmEgresos = new BMEgresos(Connection);
            Egresos egresoD = new Egresos();
            Egresos egresoH = new Egresos();


            List<Egresos> listaEgresos = new List<Egresos>();
            egresoD.Fecha = FechaD.GetFecha();
            egresoH.Fecha = FechaH.GetFecha();
            listaEgresos = bmEgresos.BMEgresosSearch(egresoD, egresoH);

            if (listaEgresos.Count > 0)
            {
                foreach (Egresos egreso in listaEgresos)
                {
                    iCantidad++;
                    dTotal += egreso.Monto;
                }
            }

            if (iCantidad > 0)
            {
                lblCantidad.Text = iCantidad.ToString();
                lblTotal.Text = dTotal.ToString("###,###,###,##0.00");
                lblTipo.Text = "Informe de EGRESOS para el período";
            }
            else
            {
                lblCantidad.Text = "0";
                lblTotal.Text = "0";
                lblTipo.Text = "No hay EGRESOS registrados para el período";
            }
            Egresos egresosTotal = new Egresos();
            egresosTotal.Id_Caja = Convert.ToInt64(iCantidad);
            egresosTotal.Monto = dTotal;
            Session["egresosTotal"] = egresosTotal;

            btnVer.Enabled = false;

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ResultadoGlobal
    protected void ResultadoGlobal()
    {
        try
        {
            IngresosGlobal();
            EgresosGlobal();
            Ingresos ingresos = new Ingresos();
            Egresos egresos = new Egresos();
            ingresos = (Ingresos)Session["ingresosTotal"];
            egresos = (Egresos)Session["egresosTotal"];
            Int64 iCantidad = ingresos.Id_Caja;
            Decimal dIngresos = ingresos.Monto;
            iCantidad += egresos.Id_Caja;
            Decimal dEgresos = egresos.Monto;
            Decimal dResultado = dIngresos - dEgresos;

            if (iCantidad > 0)
            {
                lblCantidad.Text = iCantidad.ToString();
                
                lblTipo.Text = "Resultado del período";
                if (dResultado > 0)
                {
                    lblTotal.Visible = false;
                    lblTGreen.Visible = true;
                    lblTGreen.Text = dResultado.ToString("###,###,###,##0.00");
                }
                else
                {
                    lblTotal.Visible = false;
                    lblTRed.Visible = true;
                    lblTRed.Text = dResultado.ToString("###,###,###,##0.00");
                }
            }
            else
            {
                lblCantidad.Text = "0";
                lblTotal.Text = "0";
                lblTipo.Text = "No hay Operaciones en este período";
            }

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region DeudaClientes
    protected void DeudaClientes()
    {
        try
        {
            Clientes cliente0 = new Clientes();
            BMClientes bmClientes = new BMClientes(Connection);
            List<Clientes> listaClientes = new List<Clientes>();
            cliente0.Id_Cliente = 0;
            listaClientes = bmClientes.BMClientesSearch(cliente0);
            int iCantidad = 0;
            Decimal dTotal = 0;
            foreach (Clientes cliente in listaClientes)
            {
                if (cliente.Saldo != 0)
                {
                    iCantidad++;
                    dTotal += cliente.Saldo;
                }  
            }
            if (iCantidad > 0)
            {
                lblCantidad.Text = iCantidad.ToString("###,###,###,###");
                lblTotal.Text = dTotal.ToString("###,###,###,###.##");
            }
            else
            {
                lblCantidad.Text = "0";
                lblTotal.Text = "0";
                lblTipo.Text = "No hay Clientes con saldos pendientes";
            }            
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region DeudaProveedores
    protected void DeudaProveedores()
    {
        try
        {
            Proveedores proveedor0 = new Proveedores();
            BMProveedores bmProveedores = new BMProveedores(Connection);
            List<Proveedores> listaProveedores = new List<Proveedores>();
            proveedor0.Id_Proveedor = 0;
            listaProveedores = bmProveedores.BMProveedoresSearch(proveedor0);
            int iCantidad = 0;
            Decimal dTotal = 0;
            foreach (Proveedores proveedor in listaProveedores)
            {
                if (proveedor.Saldo != 0)
                {
                    iCantidad++;
                    dTotal += proveedor.Saldo;
                }
            }
            if (iCantidad > 0)
            {
                lblCantidad.Text = iCantidad.ToString("###,###,###,###");
                lblTotal.Text = dTotal.ToString("###,###,###,###.##");
            }
            else
            {
                lblCantidad.Text = "0";
                lblTotal.Text = "0";
                lblTipo.Text = "No hay Proveedores con saldos pendientes";
            } 
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #endregion
}